import os
import re
import random
import string
import time
import win32api
import win32print
import tkinter as tk
from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH


def print_file(filename):
    win32api.ShellExecute(0, 'print', filename,
                          '/d:"%s"' % win32print.GetDefaultPrinter(), '.', 0)


def cmc_content(text_info, kind="首次沟通", fill={'时间': '', '内容': ''}):
    if not os.path.exists('.\\沟通'):
        os.mkdir('.\\沟通')
    d = Document(f'.\\mydocx\\{kind}.docx')

    # 获取word文档内的表格列表
    t = d.tables
    # 第一个表格为病人基本信息，包括姓名、性别、年龄、住院号
    t1 = t[0]

    # 姓名值位于t1.cell(0, 1)，即第一行第2列；
    run = t1.cell(0, 1).paragraphs[0].add_run(text_info['姓名'])
    run.font.name = '宋体'
    run.font.size = 140000
    # 性别值位于t1.cell(0, 2)，即第一行第3列；
    run = t1.cell(0, 2).paragraphs[0].add_run(text_info['性别'])
    run.font.name = '宋体'
    run.font.size = 140000
    # 年龄值位于t1.cell(0, 5)，即第一行第4列；
    run = t1.cell(0, 3).paragraphs[0].add_run(text_info['年龄'])
    run.font.name = '宋体'
    run.font.size = 140000
    # 住院号
    run = t1.cell(0, 4).paragraphs[0].add_run(text_info['住院号'])
    run.font.name = '宋体'
    run.font.size = 140000
    if kind == "首次沟通":
        # 沟通时间
        t2 = t[1]
        run = t2.cell(0, 0).paragraphs[0].add_run(text_info['入院时间'])
        run.font.name = '宋体'
        run.font.size = 150000
        # 沟通内容
        zljh = re.sub(r"请陈志鑫中医主治医师.+?治疗。", '', text_info.setdefault('诊疗计划', '无信息')[1]) if text_info.setdefault('诊疗计划', '') else "无信息"
        d1 = f"一、初步诊断：{text_info['诊断']}"
        d2 = f"二、病情状况及病程阶段：{text_info['病例特点']}可能进一步加重，亦可累及其他脏器，合并心肌损伤、肝损伤等多脏器损害，甚至呼吸循环衰竭等危及生命情况。"
        d3 = f"三、初步拟行的检查：{text_info['诊疗计划'][2]}"
        d4 = f"四、初步治疗计划：1、{text_info['诊疗计划'][0]}2、{zljh}"
        d5 = "五、在治疗过程中、后可能发生的、不可避免的不良反应及副作用：由于医学尚有许多未确定因素，疾病的发生、发展也因个体差异存在许多意外情况，在检查治疗过程中可能会出现：1.治疗效果差甚至无效；2.发生药物过敏反应、输液反应等；3.身体本身疾病加重或潜在并发症、伴发疾病发作致病情加重；4.其他不可预计的情形等情况。疾病进一步加重导致多脏器功能衰竭，严重时危及生命。"
        d6 = "六、患者的病情及预后：大部分患儿经治疗后症状缓解，各项指标逐渐恢复正常，小部分患儿可能出现反复发热、代谢紊乱、继发感染、甚至多脏器损害等。"
        d7 = "七、医师需要告知患者和患者及家属需要了解的其他情况：1）遵守医院病房管理各项规定，配合护士保持病房清洁、通风，按时缴纳住院费用，病情变化及时与主管医师或值班医师沟通。2）参加城乡居民医保患者3日内需要家长带身份证及户口本和农合证（医保卡）找主管医师审核身份，再到医院城乡居民医保办登记。"
    elif kind == "出院沟通":
        # 沟通时间
        t2 = t[1]
        run = t2.cell(0, 0).paragraphs[0].add_run(text_info['出院时间'])
        run.font.name = '宋体'
        run.font.size = 150000
        # 沟通内容

        d1 = f"一、初步诊断：{text_info['诊断']}"
        d2 = f"二、出院诊断：{text_info['出院诊断']}"
        d3 = f"三、简要诊疗经过及效果：{text_info['诊疗经过']}"
        d4 = f"四、出院后注意事项：合理饮食，避免受凉。"
        out_patient = re.split(r'[;；]', text_info['出院医嘱'])

        d5 = f"五、出院后用药及用法：{out_patient[0].strip().lstrip('1、')}"
        d6 = "六、是否定期随诊复查：1周后我院我科门诊复诊（南阳市中心医院7号楼1楼6诊室，电话：0371-65036131）。"
        d7 = "七、医师需要告知患者和患者及家属需要了解的其他情况：如有发热、咳嗽等症状，及时就诊。"
    else:
        # 沟通时间
        t2 = t[1]
        run = t2.cell(0, 0).paragraphs[0].add_run(fill['时间'])
        run.font.name = '宋体'
        run.font.size = 150000
        # 沟通内容
        d1 = fill['内容']
        d2 = d3 = d4 = d5 = d6 = d7 = ''
    d8 = "沟通结果：今日与家属_________就以上情况进行了沟通，并做出详细解释，患者家属已充分理解，表示同意。"
    d9 = "患方意见："
    d10 = "沟通医师：主治医师：陈白璐         患方签名："
    d11 = "主治医师：                        或"
    d12 = "(副)主任医师：         其授权人(监护人)签名：       与患者关系："
    # date_to_write = "\n".join([d1, d2, d3, d4, d5])

    # run = t3.cell(0, 0).paragraphs[0].add_run(date_to_write)
    # run.font.name = '宋体'
    # run.font.size = 140000
    # t3.cell(0, 0).paragraphs[0].paragraph_format.first_line_indent = 406400
    t3 = t[2]
    for each in [
            d1,
            d2,
            d3,
            d4,
            d5,
            d6,
            d7,
            d8,
            d9,
    ]:
        if each:
            p = t3.cell(0, 0).add_paragraph()
            run = p.add_run(each)
            run.font.name = '宋体'
            run.font.size = 150000
            p.paragraph_format.first_line_indent = 406400
            p.paragraph_format.line_spacing = 1.25
            p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.LEFT

    for each in [d10, d11, d12]:
        p = t3.cell(0, 0).add_paragraph()
        run = p.add_run(each)
        run.font.name = '宋体'
        run.font.size = 150000
        p.paragraph_format.line_spacing = 1.25
        p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.LEFT
    if not os.path.exists('temp'):
        os.mkdir('temp')
    random_file_name1 = text_info['姓名'] + kind
    random_file_name1 += ''.join(
        random.sample(string.ascii_letters + string.digits, 8))

    d.save('.\\沟通\\%s.docx' % random_file_name1)
    # 调试
    os.startfile(os.path.abspath('.\\沟通\\%s.docx' % random_file_name1))
    # print_file(os.path.abspath('.\\temp\\%s.docx' % random_file_name1))


# text = {
#     '病房':
#     '儿童消化心血管科',
#     '床号':
#     'W1307-J12',
#     '姓名':
#     '赵梦轩',
#     '工作单位':
#     '无',
#     '性别':
#     '男',
#     '现住址':
#     '新野县上庄乡王大桥五组',
#     '年龄':
#     '2岁1月',
#     '身份证明号':
#     '411329201905240111',
#     '婚姻状况':
#     '未婚',
#     '联系人姓名':
#     '赵玉',
#     '民族':
#     '汉族',
#     '联系人与患者关系':
#     '父母',
#     '职业':
#     '其他',
#     '联系人电话':
#     '18937710959',
#     '籍贯':
#     '河南省南阳市',
#     '联系人地址':
#     '新野县上庄乡王大桥五组',
#     '出生地':
#     '河南省南阳市',
#     '入院时间':
#     '2022.02.03 17:17',
#     '联系电话':
#     '无',
#     '病史采集时间':
#     '2022.02.03 18:15',
#     '入院情况':
#     '一般',
#     '记录时间':
#     '2022.02.03 18:20',
#     '过敏史':
#     '无',
#     '病史陈述者':
#     '患者家属',
#     '住院号':
#     '22012408',
#     '入院日期':
#     '2022.02.03',
#     '主诉':
#     '间断发热、腹泻伴呕吐2天',
#     '医师':
#     '陈白璐',
#     '诊断':
#     '1、肺炎？颅内感染？ 2、幼儿腹泻 3、II°脱水 4、生长发育迟缓',
#     '现病史':
#     '2。',
#     'TPRBP':
#     'T：36.测mmHg',
#     '入院体检':
#     '神志清，精神欠佳，口周无发绀，口腔粘膜光滑，咽红，颈软，双肺呼吸音粗，无啰音，心率112次/分，心音有力，律齐，未闻及病理性杂音，腹稍胀，肝脾肋下未触及，肠鸣音正常，四肢末梢暖，双侧巴氏征阴性。',
#     '入院化验单':
#     '无',
#     '病人简介':
#     '赵梦轩，男，2岁1月。',
#     '入院情况(出院记录)':
#     '赵梦轩，男，2岁1月。 以“间断发热、腹泻伴呕吐2天”入院。体格检查P：未测mmHg，神志清，精神欠佳，口周无发绀，口腔粘膜光滑，咽红，颈软，双肺呼吸音粗，无啰音，心率112次/分，心音有力，律齐，未闻及病理性杂音，腹稍胀，肝脾肋下未触及，肠鸣音正常，四肢末梢暖，双侧巴氏征阴性。',
#     '病例特点':
#     '患儿2岁1月，病史2天，以反复发热、腹泻伴呕吐为主要表现；合并脱水。',
#     '诊疗计划':
#     ('I级护理，合理饮食；',
#      '患儿2岁1月，病史2天，以反复发热、腹泻伴呕吐为主要表现；合并脱水；纳差，入量少，给予补液补碱维持水电解质平衡，给予止酸药物应用，结合患儿年龄层易感因素，考虑合并革兰氏阴性杆菌感染，给予头孢他啶0.6 q12h抗感染，蒙脱石散灌肠止泻治疗。',
#      '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111',
#      '病情评估一般，可能进一步发展出现呼吸困难、呼吸循环衰竭等危及生命情况，病情已告家长，签字见医患沟通协议书。'),
#     '化验单':
#     '入院根据当前疫情防控及上级文件要求：查新型冠状病毒核酸检测示阴性。',
#     '影像学':
#     '上腹部平扫：不全肠梗阻表现。腹部实质脏器CT平扫未见明显异常。请结合临床。 下腹部平扫：不全肠梗阻表现。腹部实质脏器CT平扫未见明显异常。请结合临床。 3.0T颅脑平扫：颅脑MRI平扫示脑实质未见明显异常。腺样体肥大。',
#     '出院日期':
#     '2022.02.19',
#     '出院诊断':
#     '1.幼儿腹',
#     '诊疗经过':
#     '入院完善相关检查，血尿粪常规、CRP、肝功能、心肌酶等，给予抗感染，补液，抑酸护胃治疗，中药贴敷治疗，止酸药物应用，患儿受凉后体温反复，升级抗感染治疗方案，请中医儿科会诊辨证施治，住院16天，患儿体温正常，无腹泻、呕吐，临床治愈，讲明注意事项后通知出院。',
#     '出院情况':
#     '精神可，体温正常，无呕吐、腹泻，无憋气及发绀，无气促及呼吸费力，已排气排便。查体',
#     '出院医嘱':
#     '     继续口服药物巩固治疗（头孢泊肟酯30mg q12h\xa0po），流质饮食，1周后复诊，如有呕吐、发热等症状及时就诊。',
#     '病史':
#     '17:17 患儿以“间断发热、腹泻口周无发绀，口腔粘膜光滑，咽红，颈软，双肺呼吸音粗，无啰音，心率112次/分，心音有力，律齐，未闻及病理性杂音，腹稍胀，肝脾肋下未触及，肠鸣音正常，四肢末梢暖，双侧巴氏征阴性。 初步诊断：1、肺炎？颅内感染？ 2、幼儿腹泻 3、II°脱水 4、生长发育迟缓 治疗：患儿2岁1月，病史2天，以反复发热、腹泻伴呕吐为主要表现；合并脱水；纳差，入量少，给予补液补碱维持水电解质平衡，给予止酸药物应用，结合患儿年龄层易感因素，考虑合并革兰氏阴性杆菌感染，给予头孢他啶0.6 q12h抗感染，蒙脱石散灌肠止泻治疗。'
# }


class CMC(tk.Toplevel):
    def __init__(self, text_info):
        self.text_info = text_info
        super().__init__()
        self.wm_attributes('-topmost', 1)

        sw = self.winfo_screenwidth()
        sh = self.winfo_screenheight()

        ww = 550
        wh = 500
        self.geometry("%dx%d+%d+%d" % (ww, wh, (sw - ww) / 2, (sh - wh) / 2))
        self.after(1, lambda: self.focus_force())
        self.iconphoto(False, tk.PhotoImage(file='title.png'))
        self.title('沟通')
        self.flag = tk.StringVar()
        self.flag.set('首次沟通')

        self.time_ = tk.StringVar()
        self.time_.set(time.strftime('%Y.%m.%d %H:%M', time.localtime()))
        radio_frame = tk.Frame(self)
        radio_frame.pack()
        tk.Radiobutton(radio_frame,
                       variable=self.flag,
                       text='首次沟通',
                       value='首次沟通').pack(side=tk.LEFT)
        tk.Radiobutton(radio_frame,
                       variable=self.flag,
                       text='出院沟通',
                       value='出院沟通').pack(side=tk.LEFT)
        tk.Radiobutton(radio_frame,
                       variable=self.flag,
                       text='普通沟通',
                       value='普通沟通').pack(side=tk.LEFT)
        tk.Label(self, text=f"沟通时间").pack(pady=5)
        tk.Entry(self, textvariable=self.time_).pack(pady=5)
        tk.Label(self, text="沟通内容").pack(pady=5)
        self.text_ = tk.Text(self, )
        self.text_.pack(pady=5)

        btn_frame = tk.Frame(self)
        btn_frame.pack(pady=10)
        btn_ok = tk.Button(btn_frame,
                           text='确 定',
                           width=12,
                           height=1,
                           activebackground='grey',
                           relief='groove')
        btn_ok.bind('<ButtonRelease-1>', self.submit)
        btn_ok.pack(side=tk.LEFT)
        btn_cancel = tk.Button(btn_frame,
                               text='取消',
                               command=self.cancel,
                               width=12,
                               height=1,
                               activebackground='grey',
                               relief='groove')
        btn_cancel.pack(side=tk.RIGHT)

    def cancel(self):

        self.destroy()

    def submit(self, event):
        flag = self.flag.get()
        fill = {'时间': self.time_.get(), '内容': self.text_.get(1.0, tk.END)}
        cmc_content(self.text_info, kind=flag, fill=fill)


if __name__ == "__main__":
    pass